<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="utf-8" lang="utf-8">
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title>
   模型 - CodeIgniter 中文手册|用户手册|用户指南|Wiki文档
  </title>
  <link rel="shortcut icon" href="/user_guide/../images/design/favicon.ico" type="image/x-icon" />
  <link rel="stylesheet" type="text/css" media="all" href="/user_guide/userguide.css" />
  <link rel="search" href="/user_guide/../CodeIgniterSearch.xml" type="application/opensearchdescription+xml" title="CodeIgniter 搜索" />
  <link rel="canonical" href="/user_guide/general/models.html" />
  <script type="text/javascript" src="/user_guide/nav/nav.js">
  </script>
  <script type="text/javascript" src="/user_guide/nav/prototype.lite.js">
  </script>
  <script type="text/javascript" src="/user_guide/nav/moo.fx.js">
  </script>
  <script type="text/javascript" src="/user_guide/nav/user_guide_menu.js">
  </script>
  <meta name="robots" content="all" />
  <meta name="author" content="ExpressionEngine Dev Team" />
  <meta name="description" content="CodeIgniter 中文手册, CodeIgniter 用户指南, CodeIgniter User Guide, Wiki 文档" />
 </head>
 <body>
  <!-- START NAVIGATION -->
  <div id="nav">
   <div id="nav_inner">
    <script type="text/javascript">
     create_menu('/user_guide/');
    </script>
   </div>
  </div>
  <script type="text/javascript">
   _setNavigation();
  </script>
  <div id="nav2">
   <a name="top">
   </a>
   <a href="javascript:void(0);" onclick="myHeight.toggle();">
    <img src="/user_guide/images/nav_toggle_darker.jpg" width="154" height="43" border="0" title="切换目录" alt="切换目录" />
   </a>
  </div>
  <div id="masthead">
   <table cellpadding="0" cellspacing="0" border="0" style="width:100%">
    <tr>
     <td width="350">
      <h1>
       CodeIgniter 用户指南 版本 2.0.0
      </h1>
     </td>
     
     <td id="breadcrumb_right">
      <a href="/user_guide/toc.html">
       目录页
      </a>
     </td>
    </tr>
   </table>
  </div>
  <!-- END NAVIGATION -->
  <!-- START BREADCRUMB -->
  <table cellpadding="0" cellspacing="0" border="0" style="width:100%">
   <tr>
    <td id="breadcrumb">
     <a href="/" target="_blank">
      CodeIgniter 中国首页
     </a>
     &nbsp;&#8250;&nbsp;
     <a href="/user_guide/toc.html">用户指南目录</a>
     &nbsp;&#8250;&nbsp;模型
    </td>
    <td id="searchbox">
     <form method="get" action="http://www.google.com/search" target="google_window">
      <input type="hidden" name="client" value="pub-0176846097796333" />
      <input type="hidden" name="forid" value="1" />
      <input type="hidden" name="ie" value="UTF-8" />
      <input type="hidden" name="oe" value="UTF-8" />
      <input type="hidden" name="as_sitesearch" id="as_sitesearch" value="codeigniter.org.cn/user_guide/" />
      搜索用户指南&nbsp;
      <input type="text" class="input" style="width:200px;" name="q" id="q" size="31" maxlength="255" value="" />
      &nbsp;
      <input type="submit" class="submit" name="sa" value="Go" />
     </form>
    </td>
   </tr>
  </table>
  <!-- END BREADCRUMB -->
  <div style="clear:both;text-align:right;padding: 6px 40px 0 0;">
   <a href="http://codeigniter.com/user_guide/general/models.html" target="_blank">
    查看原文
   </a>
  </div>
  <!--<br clear="all"  />-->
  <!-- START CONTENT -->
  <div id="content">
   <h1>
    模型
   </h1>
   <p>
    模型对于那些想用传统MVC方式的人来说是
    <strong>
     可选
    </strong>
    的。
   </p>
   <ul>
    <li>
     <a href="#what">
      什么是模型?
     </a>
    </li>
    <li>
     <a href="#anatomy">
      剖析模型
     </a>
    </li>
    <li>
     <a href="#loading">
      载入模型
     </a>
    </li>
    <li>
     <a href="#auto_load_model">
      自动载入模型
     </a>
    </li>
    <li>
     <a href="#conn">
      连接数据库
     </a>
    </li>
   </ul>
   <h2>
    <a name="what">
    </a>
    什么是模型?
   </h2>
   <p>
    模型是专门用来和数据库打交道的PHP类。例如，假设你想用CodeIgniter来做一个Blog。你可以写一个模型类，里面包含插入、更新、删除Blog数据的方法。下面的例子将向你展示一个普通的模型类:
   </p>
   <code>
    class&nbsp;Blogmodel&nbsp;extends&nbsp;CI_Model&nbsp;&#123;
    <br />
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;var $title&nbsp;&nbsp; = '';
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;var $content = '';
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;var $date&nbsp;&nbsp;&nbsp; = '';
    <br />
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;__construct()
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&#123;
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parent::__construct();
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&#125;
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;get_last_ten_entries()
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&#123;
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$query = $this-&gt;db-&gt;get('entries', 10);
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return $query-&gt;result();
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&#125;
    <br />
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;insert_entry()
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&#123;
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;title&nbsp;&nbsp; = $_POST['title']; // 请阅读下方的备注
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;content = $_POST['content'];
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;date&nbsp;&nbsp;&nbsp; = time();
    <br />
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;db-&gt;insert('entries',&nbsp;$this);
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&#125;
    <br />
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;update_entry()
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&#123;
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;title&nbsp;&nbsp; = $_POST['title'];
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;content = $_POST['content'];
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;date&nbsp;&nbsp;&nbsp; = time();
    <br />
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;db-&gt;update('entries',&nbsp;$this, array('id' => $_POST['id']));
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&#125;
    <br />
    <br />
    &#125;
   </code>
   <p>
    注意: 上面用到的函数是
    <a href="../database/active_record.html">
     Active Record
    </a>
    数据库函数.
   </p>
   <p class="important">
    <strong>
     备注:
    </strong>
    为了简单一点，我们直接使用了$_POST。不过，这不太好，平时我们应该使用
    <a href="../libraries/input.html">
     输入类
    </a>
    ：$this-&gt;input-&gt;post('title')
   </p>
   <h2>
    <a name="anatomy">
    </a>
    剖析模型
   </h2>
   <p>
    模型类文件存放在
    <dfn>
     application/models/
    </dfn>
    文件夹。 如果你愿意，可以在里面建立子文件夹。
   </p>
   <p>
    最基本的模型类必须像这样:
   </p>
   <code>
    class&nbsp;
    <var>
     Model_name
    </var>
    &nbsp;extends&nbsp;CI_Model&nbsp;&#123;
    <br />
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;
    <var>
     __construct
    </var>
    ()
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&#123;
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parent::__construct();
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&#125;
    <br />
    &#125;
   </code>
   <p>
    <var>
     Model_name
    </var>
    是模型类的名字。  类名的首字母
    <strong>
     必须
    </strong>
    大写，其他字母小写。
并且确保你的类继承了基本模型类(Base Model Class)。
   </p>
   <p>
    文件名应该是模型类名的小写版。比如，如果你的类是:
   </p>
   <code>
    class&nbsp;
    <var>
     User_model
    </var>
    &nbsp;extends&nbsp;CI_Model&nbsp;&#123;
    <br />
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;
    <var>
     __construct
    </var>
    ()
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&#123;
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parent::__construct();
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&#125;
    <br />
    &#125;
   </code>
   <p>
    类的文件名应该是：
   </p>
   <code>
    application/models/
    <var>
     user_model.php
    </var>
   </code>
   <h2>
    <a name="loading">
    </a>
    载入模型
   </h2>
   <p>
    模型可以在
    <a href="controllers.html">
     controller
    </a>
    中被引用。
就像这样:
   </p>
   <code>
    $this-&gt;load-&gt;model('
    <var>
     Model_name
    </var>
    ');
   </code>
   <p>
    如果模型文件在子文件夹下，引用的时候要带上相对路径名。例如：如果你有一个模型
    <dfn>
     application/models/blog/queries.php
    </dfn>
    。
下面的代码可以引用它:
   </p>
   <code>
    $this-&gt;load-&gt;model('
    <var>
     blog/queries
    </var>
    ');
   </code>
   <p>
    模型一旦被载入，你就能通过下面的方法使用它:
   </p>
   <code>
    $this-&gt;load-&gt;model('
    <var>
     Model_name
    </var>
    ');
    <br />
    <br />
    $this-&gt;
    <var>
     Model_name
    </var>
    -&gt;function();
   </code>
   <p>
    在默认的情况下模型名称就直接被引入作为对象名，就如上面所示。当然，如果你愿意，可以起个更好记的对象名！那么，可以在加载模型函数中指定第二个参数来设定，例如：
   </p>
   <code>
    $this-&gt;load-&gt;model('
    <var>
     Model_name
    </var>
    ', '
    <kbd>
     fubar
    </kbd>
    ');
    <br />
    <br />
    $this-&gt;
    <kbd>
     fubar
    </kbd>
    -&gt;function();
   </code>
   <p>
    这里有个控制器的例子，加载一个模型，然后通过视图显示出来
   </p>
   <code>
    class&nbsp;Blog_controller&nbsp;extends&nbsp;CI_Controller&nbsp;&#123;
    <br />
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;blog()
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&#123;
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;load-&gt;model('Blog');
    <br />
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$data['query'] = $this-&gt;Blog-&gt;get_last_ten_entries();
    <br />
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;load-&gt;view('blog', $data);
    <br />
    &nbsp;&nbsp;&nbsp;&nbsp;&#125;
    <br />
    &#125;
   </code>
   <h2>
    <a name="auto_load_model" id="auto_load_model">
    </a>
    自动载入模型
   </h2>
   <p>
    如果您需要一个在整个项目中都起作用的特定模型，您可以让 CodeIgniter 在初始化时自动装载它。实现的方法是打开 application/config/autoload.php 文件，然后在自动装载数组中添加上这个模型。
   </p>
   <p class="important">
    <strong>
     备注:
    </strong>
    经过测试(以加载一个模型为例)自动加载模型和手动载入模型时，消耗的内存情况是一样的！但是当加载模型越多消耗内存就会越大。自动加载模型是要牺牲内存消耗换取的，所以尽量不要自动加载不必要贯穿全站项目的模型！
   </p>
   <h2>
    <a name="conn">
    </a>
    连接到数据库
   </h2>
   <p>
    当一个模型被载入时，它并不会自动连接数据库。以下方法可以使您连接数据库:
   </p>
   <ul>
    <li>
     您可以使用标准方法来连接数据库（
     <a href="../database/connecting.html">
      说明
     </a>
     ）, 也可以通过控制器或者您的自定义模型。
    </li>
    <li>
     您可以把第三个参数设置为TRUE来使模型装载函数自动连接数据库，连接配置可以在您的数据库配置文件中可以定义:
    </li>
    <code>
     $this-&gt;load-&gt;model('
     <var>
      Model_name
     </var>
     ', '',
     <kbd>
      TRUE
     </kbd>
     );
    </code>
    <li>
     您可以手动设定第三个参数来载入您的自定义数据库配置:
     <code>
      $config['hostname'] = "localhost";
      <br />
      $config['username'] = "myusername";
      <br />
      $config['password'] = "mypassword";
      <br />
      $config['database'] = "mydatabase";
      <br />
      $config['dbdriver'] = "mysql";
      <br />
      $config['dbprefix'] = "";
      <br />
      $config['pconnect'] = FALSE;
      <br />
      $config['db_debug'] = TRUE;
      <br />
      <br />
      $this-&gt;load-&gt;model('
      <var>
       Model_name
      </var>
      ', '',
      <kbd>
       $config
      </kbd>
      );
     </code>
    </li>
    <p class="important">
     <strong>
      备注:
     </strong>
     经过友好链接测试（也即只连接数据库不涉及查询），自动连接数据库和手动连接数据库时，消耗的内存情况是一样的，我本人的本机测试是0.67M
    </p>
   </ul>
   <p>
    &nbsp;
   </p>
   <div id="Contributors">
    翻译贡献者:
analyzer, Hex, longbill, ripen, shishirui, soyota
   </div>
   <div id="DocDate">
    最后修改: 2011-09-16 14:30:06
   </div>
  </div>
  <!-- END CONTENT -->
  <div id="footer">
   <p>
    上一个主题:&nbsp;&nbsp;
    <a href="/user_guide/general/views.html">
     视图
    </a>
    &nbsp;&nbsp;&middot;&nbsp;&nbsp;
    <a href="#top">
     页首
    </a>
    &nbsp;&middot;&nbsp;&nbsp;
    <a href="/user_guide/toc.html">用户指南目录</a>
    &nbsp;&nbsp;&middot;&nbsp;&nbsp;下一个主题:&nbsp;&nbsp;
    <a href="/user_guide/general/helpers.html">
     辅助函数
    </a>
   </p>
   <p>
    <a href="http://codeigniter.com">
     CodeIgniter
    </a>
    &nbsp;&middot;&nbsp; 版权所有 &#169; 2006-2011 &nbsp;&middot;&nbsp;
    <a href="http://ellislab.com/">
     Ellislab, Inc.
    </a>
   </p>
   <p>
    中文化:
    <a href="">
     CodeIgniter 中国
    </a>
    &nbsp;&middot;&nbsp; 制作: Hex &nbsp;&middot;&nbsp; 版本: 1.20 &nbsp;&middot;&nbsp; 鸣谢: 子非鱼
   </p>
  </div>
  
  <div style="display:none">
   
   <noscript>
    <a href="http://www.51.la/?3289908" target="_blank">
     <img alt="我要啦免费统计" src="http://img.users.51.la/3289908.asp" style="border:none" />
    </a>
   </noscript>
  </div>
 </body>
</html>